"""
xmlio.py

Mixin class to support pygene objects in 
loading/saving as xml
"""

import StringIO
from xml.dom.minidom import getDOMImplementation, parse, parseString

domimpl = getDOMImplementation()

class PGXmlMixin(object):
    """
    mixin class to support pygene classes
    serialising themselves to/from xml
    """
    def xmlDump(self, fileobj):
        """
        Dumps out the population to an open file in XML format.
    
        To dump to a string, use .xmlDumps() instead
        """
        doc = domimpl.createDocument(None, "pygene", None)
    
        top = doc.documentElement
        top.appendChild(doc.createComment(
            "generated by pygene - http://www.freenet.org.nz/python/pygene"))
    
        self.xmlDumpSelf(doc, top)
    
        fileobj.write(doc.toxml())
    
    
    
    
    def xmlDumps(self):
        """
        dumps out to xml, returning a string of the raw
        generated xml
        """
        s = StringIO.StringIO()
        self.xmlDump(s)
        return s.getvalue()
    
    def xmlDumpSelf(self, doc, parent):
        """
        Writes out the contents of this population
        into the xml tree
        """
        raise Exception("class %s: xmlDumpSelf not implemented" % \
            self.__class__.__name__)
    
    def xmlDumpClass(self, tag):
        """
        dumps out class information
        """
        tag.setAttribute("class", self.__class__.__name__)
        tag.setAttribute("module", self.__class__.__module__)
    
    def xmlDumpAttribs(self, tag):
        """
        """


